==과 ===

==는 값이 동일한지 비교, 자동으로 형변환해서 비교한다

===는 값과 타입 모두 동일한지 비교, 형변환하지 않는다.

JS는 상당히 유연한 언어라서, 모든 형변환 케이스를 숙지하고 있기 힘들기 때문에 === 사용하는 것을 권장.

switch 문 인자로 int 값이 아닌 “string”형태도 가능.(다른 자료형이 되는지는 체크 필요.)

연산자

!

객체, “”, NaN에도 적용이 가능, Boolean과 같은 효과.

1
2
var a = {};
console.log(!!a); // true

&&

값이 boolean이 아닐시

  1. 둘중 하나라도, null/NaN/undefined라면 null/NaN/undefined 반환.
  2. 객체 && (_) : 앞 피연산자가 객체라면, 두번째 피연산자 반환.
  3. true && (객체) : 앞 피연산자가 true 일때만, 뒤 연산자 반환

||

값이 boolen이 아닐시

  1. 둘 모두 null/NaN/undefined라면, null/NaN/undefined 반환
  2. (객체) || _ : 앞 피연산자가 객체라면, 첫번째 객체 반환
  3. false || (객체) : 뒤 피연산자 반환.

+

1
2
3
5 + "5" // 55
"abc =" + 3 + 8 // abc38
5 - true // 4

<

1
var result = "Brick" < "alphabet"; // true

사전식 배열로 비교하려면, toLowerCase()를 사용해서 비교하자. JS 비교는 대문자가 더 앞서 위치함.

객체 비교

1
2
3
4
5
var o1 = {a: 1};
var o2 = {a: 2};

o1 == o2; // false
JSON.stringify(o1) == JSON.stringify(o2); // true

o1과 o2는 객체 그 자체가 아니라, 객체를 가리키는 포인터이기 때문에 동등비교가 되지 않는다. 따라서 JSON.stringify를 통해 비교하는 것이 좋다고 한다.

Reference

http://enarastudent.tistory.com/entry/null과-undefined의-차이

https://stackoverflow.com/questions/1068834/object-comparison-in-javascript